package com.laity.demo1;

/**
 * @author: Laity
 * @Project: JavaLaity
 * @Package: com.laity.demo1.SaleTicketDemo01
 * @Date: 2023年11月21日 23:26
 * @Description: 基本卖票例子
 * 真正的多线程开发，公司中的开发，降低耦合性（高内聚、低耦合）
 * 线程就是一个单独的资源类，没有附属的操作
 * 资源类包含：1、属性；2、方法
 */

public class SaleTicketDemo01 {
    public static void main(String[] args) {
        // 多线程操作
        // 并发：多个线程操作同一个资源类,
        // 操作：把资源类丢进线程
        Ticket ticket = new Ticket();
        new Thread(() -> {
            for (int j = 0; j < 30; j++) {
                ticket.sale();
            }
        }, "线程A").start();

        new Thread(() -> {
            for (int j = 0; j < 30; j++) {
                ticket.sale();
            }
        }, "线程B").start();

        new Thread(() -> {
            for (int j = 0; j < 30; j++) {
                ticket.sale();
            }
        }, "线程C").start();
    }
}

// 单独的资源类  OOP编程
class Ticket {
    // 属性、方法
    private int number = 50;

    // 卖票的方法
    // synchronized 本质就是队列，锁
    public synchronized void sale() {
        if (number > 0) {
            System.out.println(Thread.currentThread().getName() + " - 卖出了第" + (number--) + "张票" + ",剩余" + number);
        }
    }
}
